package cn.bonoon.kernel.menus;

import java.util.List;

import cn.bonoon.kernel.VisibleScope;
import cn.bonoon.kernel.menus.layouts.LayoutGenerable;
import cn.bonoon.kernel.menus.tips.MenuTipHandler;

/**
 * 菜单项的定义，目前只用于实现了频道和菜单两个节点
 * 
 * @author jackson
 *
 * @see MenuDefinition
 * @see ChannelDefinition
 * 
 * @see AbstractMenuable
 * 
 * @see MenuDefinitionImpl
 * @see ChannelDefinitionImpl
 */
public interface MenuableDefinition extends ItemableDefinition, LayoutGenerable, Iterable<MenuDefinition>{

	String getHref();
	
	MenuTipHandler tipHandler();

	/** 表示这个ID是否选中 */
	boolean selected(String selected);
	
	/** 表示是否有子菜单 */
	boolean isEmpty();

	@Deprecated
	List<MenuDefinition> getMenus();
	
	/** 通过原Id(即未加密的ID)来查看子菜单，被查看的菜单必须是当前菜单项的子菜单  */
	MenuDefinition loadSubmenu(String...ids);
	
	String idSubmenu(String...ids);

	/** 菜单项的帮助说明文档 */
	DescribeDefinition getDescribe();
	
	//下面三个需要重新处理的地方
	VisibleScope getScope();

	ActionDefinition[] getActions();
	
	int getActionPrivileges();
}
